package edu.hebeu.activity;

import android.text.InputFilter;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import java.util.HashMap;
import java.util.Map;

import edu.hebeu.MainActivity;
import edu.hebeu.R;
import edu.hebeu.entity.LoginResponse;
import edu.hebeu.network.API;
import edu.hebeu.network.APIConfig;
import edu.hebeu.network.MyCallback;

public class LoginActivity extends BaseActivity {

    private EditText et_username;
    private EditText et_password;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_login;
    }

    @Override
    protected void initViews() {
        et_username = (EditText) findViewById(R.id.et_uname);
        et_password = (EditText) findViewById(R.id.et_pwd);
        et_username.getBackground().setAlpha(0);
        et_password.getBackground().setAlpha(0);

        et_username.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)}); // 设置该组件的输入最大长度为10位
        et_password.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); // 设置该组件的输入最大长度为20位
    }

    /**
     * 点击登录按钮触发登录
     * @param view
     */
    public void loginClick(View view) {
        final String username = et_username.getText().toString().trim();
        String password = et_password.getText().toString().trim();
        if (username.isEmpty()) {
            showToast("请输入账号", 0, false);
            return;
        }
        if (password.isEmpty()) {
            showToast("请输入密码", 0, false);
            return;
        }
        Map<String, Object> params = new HashMap<>();
        params.put("username", username);
        params.put("password", password);

        API.requestConfig(APIConfig.URL.LOGIN_URL, params, "")
            .postRequest(new MyCallback() {
                @Override
                public void onSuccess(final String res) {
//                    runOnUiThread(new Runnable() { // 因为该请求是异步的，异步的线程中是不能直接操作UI组件的，如果必须要操作UI组件，应该采用这种方法实现
//                        @Override
//                        public void run() {
//                            showToast(res, 0, false);
//                        }
//                    });
                    Log.i("loginSuccess", res);
                    LoginResponse loginResponse = (LoginResponse) deSerialize(res, LoginResponse.class); // 对JSON串进行反序列化
                    if (loginResponse.getCode() == 200) {
                        saveSPFile("token", loginResponse.getToken()); // 将Token持久化到文件
                        saveSPFile("username", username); // 将用户名保存到SP文件
                        jumpActivity(MainActivity.class, true); // 跳转到首页，并销毁此页(登录页)，同时需要注意：这行代码必须放到下面的吐司提示方法之前，因为下面的方法内使用了Looper消息队列(如果该语句放到其后面，就会导致该语句不能生效不能跳转)
                        // 也可以使用Looper保证子线程修改主线程(UI线程)
                        showToast("登录成功", 0, true);
                    } else {
                        showToast("登录失败,请检查您的账号或密码", 0, true);
                    }
                }

                @Override
                public void onFailure(Exception e) {
//                    runOnUiThread(new Runnable() { // 因为该请求是异步的，异步的线程中是不能直接操作UI组件的，如果必须要操作UI组件，应该采用这种方法实现
//                        @Override
//                        public void run() {
//                            showToast(res, 0, false);
//                        }
//                    });
                    // 也可以使用Looper保证子线程修改主线程(UI线程)
                    showToast("登录请求失败", 0, true);
                }
            }, false);
    }

    public void registerOnclick(View view) {
        jumpActivity(RegisterActivity.class, false);
    }
}
